package com.mf.elephant.common.framework.dao;

import java.util.List;

/**
 * DAO通用接口类
 * User: zhaoming
 * Date: 2016-06-24
 * To change this template use File | Settings | File Templates.
 **/
public interface IDao<T>{

    /**
     * 新增实体对象
     * @param entity 实体对象
     * @return 执行结果 (true:成功; false:失败)
     */
    boolean insert(T entity);

    /**
     * 批量新增实体对象
     * @param entities 实体对象列表
     * @return 执行结果 (true:成功; false:失败)
     */
    boolean batchInsert(List<T> entities);

    /**
     * 根据主键修改实体对象
     * @param entity 实体对象
     * @return 执行结果 (true:成功; false:失败)
     */
    boolean updateByPrimaryKey(T entity);

    /**
     * 根据主键删除实体对象(物理删除)
     * @param id 主键
     * @return 执行结果 (true:成功; false:失败)
     */
    boolean deleteByPrimaryKey(Long id);

    /**
     * 根据主键删除实体对象(物理删除)
     * @param entity 实体对象
     * @return 执行结果 (true:成功; false:失败)
     */
    boolean deleteByPrimaryKey(T entity);

    /**
     * 根据主键批量删除实体对象
     * @param entities 实体对象列表
     * @return 执行结果 (true:成功; false:失败)
     */
    boolean deleteByPrimaryKeys(List<T> entities);

    /**
     * 根据主键删除实体对象(逻辑删除)
     * @param entity 实体对象
     * @return 执行结果 (true:成功; false:失败)
     */
    boolean deleteByPrimaryKeyLogically(T entity);

    /**
     * 根据主键批量删除实体对象
     * @param entities 实体对象列表
     * @return 执行结果 (true:成功; false:失败)
     */
    boolean deleteByPrimaryKeysLogically(List<T> entities);

    /**
     * 根据主键查询实体对象
     * @param id 主键
     * @return 实体对象
     */
    T selectByPrimaryKey(Long id);

    /**
     * 根据主键查询实体对象
     * @param entity 实体对象
     * @return 实体对象
     */
    T selectByPrimaryKey(T entity);

    /**
     * 根据条件查询实体对象列表
     * @param entity 实体对象
     * @return 实体对象列表
     */
    List<T> selectByCondition(T entity) ;

    /**
     * 根据条件查询实体对象数量
     * @param entity 实体对象
     * @return 实体对象列表
     */
    Integer selectByConditionCount(T entity) ;

    /**
     * 分页查询实体对象列表
     * @param pageBean 分页实体
     * @param entity 实体对象
     * @return 实体对象列表
     */
    PageBean<T> pageQuery(PageBean pageBean, T entity);
}
